package miage.gestioncabinet.corem;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateful;

import miage.gestioncabinet.api.Consultation;
import miage.gestioncabinet.api.GestionCabinetException;
import miage.gestioncabinet.api.Interaction;
import miage.gestioncabinet.api.Medecin;
import miage.gestioncabinet.api.Patient;
import miage.gestioncabinet.api.PlanningRemoteService;
import miage.gestioncabinet.api.Produit;
import miage.gestioncabinet.api.Utilisateur;

@Stateful
@Remote(PlanningRemoteService.class)
public class PlanningService implements PlanningRemoteService{

	private Utilisateur utilisateur;
	private Consultation consultation = new ConsultationM();
	
	
	MedecinM m1 = new MedecinM();
	MedecinM m2 = new MedecinM();
	PatientM p1 = new PatientM();
	PatientM p2 = new PatientM();
	PatientM p3 = new PatientM();
	
	private static List<Consultation> PLANNING = new ArrayList<Consultation>(); 
	
	/**
	 * Constructeur vide pour initaliser le planning
	 */
	public PlanningService() {
		this.consultation.setDebut(Calendar.getInstance());
		this.consultation.setFin(Calendar.getInstance());
		Medecin marine = new MedecinM();
		marine.setNom("Leal");
		marine.setPrenom("Marine");
		this.consultation.setMedecin(marine);
		List<Interaction> interactions = new ArrayList<Interaction>();
		Interaction interaction = new InteractionM();
		interaction.setPrecautions("Attention à la conduite");
		Produit produitA = new ProduitM(), 
				produitB = new ProduitM();
		produitA.setCis("cocaine_123");
		produitA.setNom("Cocaïne");
		interaction.setProduitA(produitA);
		produitB.setCis("extasy_456");
		produitB.setNom("Extasy");
		interaction.setProduitB(produitB);
		interaction.setRisques("Il est dangereux de consommer de la drogue.");
		interaction.setSeverite("Très dangereux !!!");
		interactions.add(interaction);
		this.consultation.setInteractions(interactions);
	}
	
	@Override
	public Utilisateur getUtilisateur() {
		
		return this.utilisateur;
	}

	@Override
	public List<Medecin> rechercherMedecins() throws GestionCabinetException {
		m1.setNom("Magnan");
		m1.setPrenom("Valérie");
		
		m2.setNom("Gilormini");
		m2.setPrenom("Jean-Baptiste");
		
		List<Medecin> listeMedecins = new ArrayList<Medecin>();
		listeMedecins.add(m1);
		listeMedecins.add(m2);
		
		return listeMedecins;
	}

	@Override
	public List<Patient> rechercherPatients(String keyword) throws GestionCabinetException {
		
		List<Patient> listePatients = new ArrayList<Patient>();
		
		
		p1.setNom("Amabile");
		p1.setPrenom("Serge");
		p1.setDateNaissance(new GregorianCalendar(1950,0,1));
		
		
		p1.setNom("Sacaze");
		p1.setPrenom("Alban");
		p1.setDateNaissance(new GregorianCalendar(1990,2,26));
		
		
		p1.setNom("Deynes");
		p1.setPrenom("Trévor");
		p1.setDateNaissance(new GregorianCalendar(1990,3,24));
		
		List<Patient> listePatientsRetour = new ArrayList<Patient>();
		for (Patient patient : listePatients) {
			listePatientsRetour.add(patient);
		}
		return listePatientsRetour;
	}

	@Override
	public Calendar getDateDebut() {
		return this.consultation.getDebut();
	}

	@Override
	public void setDateDebut(Calendar date) {
		this.consultation.setDebut(date);
	}

	@Override
	public Calendar getDateFin() {
		return this.consultation.getFin();
	}

	@Override
	public void setDateFin(Calendar date) {
		this.consultation.setFin(date);	
	}

	@Override
	public Medecin getMedecin() {
		return this.consultation.getMedecin();
	}

	@Override
	public void setMedecin(Medecin medecin) {
		this.consultation.setMedecin(medecin);		
	}

	@Override
	public List<Consultation> listerRdv() {
		
		/*ConsultationM c1 = new ConsultationM();
		c1.setMedecin(m1);
		c1.setPatient(p1);
		c1.setDebut(new GregorianCalendar(2014,9,25,12,00,00));
		c1.setFin(new GregorianCalendar(2014,9,25,12,30,00));
	
		ConsultationM c2 = new ConsultationM();
		c2.setMedecin(m1);
		c2.setPatient(p2);
		c2.setDebut(new GregorianCalendar(2014,9,25,12,30,00));
		c2.setFin(new GregorianCalendar(2014,9,25,13,00,00));
		
		
		ConsultationM c3 = new ConsultationM();
		c3.setMedecin(m1);
		c3.setPatient(p3);
		c3.setDebut(new GregorianCalendar(2014,9,25,12,30,00));
		c3.setFin(new GregorianCalendar(2014,9,25,13,00,00));
		
		
		planning.add(c1);
		planning.add(c2);
		planning.add(c3);*/
		
		return PLANNING;
	}

	@Override
	public Consultation getRdvCourant() {
		return this.consultation;
	}

	@Override
	public void setRdvCourant(Consultation rdv) {
		this.consultation = rdv;
	}

	@Override
	public Consultation creerRdv(Calendar date) {
		Patient patient = new PatientM();
		this.consultation = new ConsultationM();
		this.consultation.setDebut(Calendar.getInstance());
		this.consultation.setFin(Calendar.getInstance());
		Medecin marine = new MedecinM();
		marine.setNom("Leal");
		marine.setPrenom("Marine");
		this.consultation.setMedecin(marine);
		List<Interaction> interactions = new ArrayList<Interaction>();
		Interaction interaction = new InteractionM();
		interaction.setPrecautions("Attention à la conduite");
		Produit produitA = new ProduitM(), 
				produitB = new ProduitM();
		produitA.setCis("cocaine_123");
		produitA.setNom("Cocaïne");
		interaction.setProduitA(produitA);
		produitB.setCis("extasy_456");
		produitB.setNom("Extasy");
		interaction.setProduitB(produitB);
		interaction.setRisques("Il est dangereux de consommer de la drogue.");
		interaction.setSeverite("Très dangereux !!!");
		interactions.add(interaction);
		this.consultation.setInteractions(interactions);
		this.consultation.setPatient(patient);
		this.consultation.setCompteRendu("Tout va bien.");
		return this.consultation;
	
	}

	@Override
	public Consultation enregistrerRdv() throws GestionCabinetException {
		if (!PLANNING.contains(this.consultation)) {
			PLANNING.add(this.consultation);
		}
		
		return this.consultation;
	}

	@Override
	public void supprimerRdv() throws GestionCabinetException {
		Iterator<Consultation> it = PLANNING.iterator();
		while (it.hasNext()) {
			Consultation consultation = it.next();
		  if (consultation.getPatient().getNom().equals(this.consultation.getPatient().getNom()) && 
			 consultation.getPatient().getPrenom().equals(this.consultation.getPatient().getPrenom())) {
		    it.remove();
		  }
		}
	}

}
